home *** CD-ROM | disk | FTP | other *** search
- 5 PRINT "[147]"
- 10 INPUT "SIZE OF BOARD";W,H
- 15 CH=81:SC=1024:SW=40
- 20 DIM B(W,H),DX(H*W),DY(H*W),LX(H*W),LY(H*W)
- 30 GOSUB 4000:REM INPUT BOARD
- 40 GOSUB 2000:REM DRAW BOARD
- 50 GOSUB 1000:REM FIND DEAD AND NEW CELLS
- 80 REM REMOVE DEAD CELLS FROM ARRAY
- 90 IF DP=0 THEN 125
- 100 FOR I=0 TO DP-1
- 110 B(DX(I),DY(I))=0
- 120 NEXT I
- 122 REM ADD NEW CELLS TO ARRAY
- 125 IF LP=0 THEN 160
- 130 FOR I=0 TO LP-1
- 140 B(LX(I),LY(I))=1
- 150 NEXT I
- 160 GOTO 40
- 1000 REM DETERMINE NUMBER OF NEIGHBORS FOR EACH CELL
- 1002 DP=0:LP=0
- 1010 FOR X=0TOW-1:FORY=0TOH-1
- 1020 N=0:T=0
- 1030 IF X<>0 THEN N=N+B(X-1,Y)
- 1040 IF X<>W-1 THEN N=N+B(X+1,Y)
- 1050 IF Y<>0 THEN N=N+B(X,Y-1)
- 1060 IF Y<>H-1 THEN N=N+B(X,Y+1)
- 1070 IF X<>0ANDY<>0 THEN N=N+B(X-1,Y-1)
- 1080 IFX<>0ANDY<>H-1THEN N=N+B(X-1,Y+1)
- 1090 IFX<>W-1ANDY<>0THEN N=N+B(X+1,Y-1)
- 1100 IFX<>W-1ANDY<>H-1THENN=N+B(X+1,Y+1)
- 1105 REM IF A POPULATED CELL, DETERMINE IT'S FATE
- 1110 IF B(X,Y)=1 THEN IF N>3OR N<2 THEN DX(DP)=X:DY(DP)=Y:DP=DP+1:GOTO 1150
- 1130 REM SEE IF AN EMPTY CELL CAN BE FILLED
- 1140 IF N=3 THEN LX(LP)=X:LY(LP)=Y:LP=LP+1
- 1150 NEXTY:NEXTX:RETURN
- 2000 REM DRAW BOARD ROUTINE
- 2010 FOR Y=0TOH-1:FORX=0TOW-1
- 2020 IF B(X,Y)=1 THEN C=CH:GOTO 2040
- 2030 C=32
- 2040 POKE SC+X+SW*Y,C
- 2050 NEXTX:NEXTY
- 2060 RETURN
- 4000 REM INPUT THE BOARD
- 4005 PRINT "[147]"
- 4008 GOSUB 5000
- 4010 FOR Y=0 TO H-1
- 4030 FOR X=0 TO W-1
- 4040 POKE SC+X+SW*Y,100
- 3840 GET A$:IF A$="" THEN 4050
- 4060 IF A$=" " THEN C=32:B(X,Y)=0:GOTO 4080
- 4070 C=CH:B(X,Y)=1
- 4080 POKE SC+X+SW*Y,C:NEXT X:NEXTY:RETURN
- 4090 GOTO 4010
- 5000 FOR X=0 TO W-1
- 5010 POKE SC+X+SW*H,64
- 5020 NEXT X
- 5030 FOR Y=0 TO H
- 5040 POKE SC+W+SW*Y,66
- 5050 NEXT Y
- 5060 POKE SC+W+SW*H,125
- 5100 PRINT ""
- 5110 FOR Y=0 TO H+2:PRINT:NEXT
- 5120 PRINT "PRESS ANY KEY TO MAKE A LIVE CELL."
- 5130 PRINT"PRESS THE SPACE BAR TO LEAVE A EMPTY"
- 5140 PRINT "CELL"
- 5199 RETURN
-